<?php
/**
 * 框架 - 配置处理类(由此进行统一的管理)
 * 
 * @version $Id: Config.php 410 2012-12-15 06:33:11Z linsir123 $
 * @package Core
 */
class Config
{
	/**
	 * @var 配置文件所在目录
	 */
	public $dir;
	
	/**
	 * @var 配置数据
	 */
	private $_data = array();
	
	/**
	 * 构造函数
	 */
	public function __construct()
	{
		$this->dir = APP_DIR .'Config/';
		$this->_data = array();
	}
	
	/**
	 * 初始化(由APP在初始化自动调用)
	 */
	public function init()
	{
		$file = 'Config/main.php';
		$options = App::import($file);
		$optCus = App::import($file, APP_DIR, false);
		if ( ! empty($optCus) && is_array($optCus)) 
			$options = array_merge($options, $optCus);
			
		///
		$this->_data['default']['main'] = $options;
	}
	
	/**
	 * 设置配置文件所在目录
	 * 
	 * @param string $dir 目录物理地址
	 */
	public function setDir($dir)
	{
		$this->dir = $dir;
	}
	
	/**
	 * 返回程序某个配置项，键为字符串并以'.'分隔，第一部份为配置文件
	 * 
	 * @example $data = App::getConf->get('page.show')
	 * 
	 * @param string $key 键名
	 * @return mixed
	 */
	public function get($key, $package = null)
	{
		if (empty($key)) 
			return null;
			
		///
		$dir = $this->dir;
		$keys = explode('.', $key);
		$fileName = array_shift($keys);
		if (empty($package)) 
			$package = 'default';
		else 
			$dir .= $package .'/';
			
		///
		if ( ! isset($this->_data[$package][$fileName])) 
			$this->_data[$package][$fileName] = App::import($fileName .'.php', $dir);
			
		///
		$exists = true;
		$conf = $this->_data[$package][$fileName];
		foreach ($keys as $key) {
			if (is_array($conf) && isset($conf[$key])) 
				$conf = $conf[$key];
			else {
				$exists = false;
				break;
			}
		}
		
		return $exists ? $conf : null;
	}
}
